home *** CD-ROM | disk | FTP | other *** search
- DECLARE SUB MenuAnnounce ()
- DECLARE SUB MenuAntenna ()
- DECLARE SUB MenuAttenuator ()
- DECLARE SUB MenuTuning ()
- DEFINT G-Z
-
- '
- ' Configuration Information
- '
- CONST RA = &H3C ' Receive Address (IC-737)
- CONST TA = &HE0 ' Transmit Address (Computer)
- CONST FREQCNT = 5 ' Number of bytes in frequency (IC-737 uses 5)
-
- CONST PORT$ = "COM1" ' Serial Port to use
- CONST PORTNO = 1 ' Serial Port to use
- CONST CONF$ = "1200,N,8,1" ' Baud rate, Parity, Bits, Stop Bits
-
- CONST SHOWCOM = 1 ' Show Com Packets ( 0=No, 1=Yes)
-
- '
- ' Declarations
- '
- DECLARE FUNCTION BCDtoINT& (BcdString AS STRING, Numbytes AS INTEGER)
- DECLARE SUB DoCommand (Cmd AS INTEGER, Arg AS STRING)
- DECLARE FUNCTION GetChan$ ()
- DECLARE FUNCTION GetOff$ ()
- DECLARE FUNCTION GetFreq$ (ByteCnt AS INTEGER)
- DECLARE FUNCTION GetMenu (x AS INTEGER, y0 AS INTEGER, y1 AS INTEGER)
- DECLARE SUB MenuInfo ()
- DECLARE SUB MenuMisc ()
- DECLARE SUB MenuMem ()
- DECLARE SUB MenuMode ()
- DECLARE SUB MenuScan ()
- DECLARE SUB MenuVFO ()
- DECLARE SUB ParseEcho (Echo AS STRING)
- DECLARE SUB ParseReply ()
- DECLARE SUB ParseRig (rig AS STRING)
- DECLARE SUB ParseTranceive (Tranceive AS STRING)
- DECLARE SUB SetupBCD ()
- DECLARE SUB SetupCOM ()
- DECLARE SUB ShowFreq (Args AS STRING)
- DECLARE SUB ShowLimit (Args AS STRING)
- DECLARE SUB ShowMainPrompts ()
- DECLARE SUB ShowMode (Args AS STRING)
- DECLARE SUB ShowOffset (Args AS STRING)
- DECLARE SUB ShowPrompt ()
- DECLARE FUNCTION STRtoHEX$ (Str AS STRING)
-
- DIM SHARED BCD$(100)
-
- '
- ' Initialize
- '
- SetupBCD
- SetupCOM
- ShowMainPrompts
-
- '
- ' Endless loop until an event handler kills us
- '
- DO UNTIL TRUE
- LOOP
-
- '
- ' Event Handlers
- '
- Serial: ParseReply: RETURN
- F1: MenuInfo: RETURN
- F2: MenuVFO: RETURN
- F3: MenuMem: RETURN
- F4: MenuMode: RETURN
- F5: DoCommand 5, GetFreq$(FREQCNT): RETURN
- F6: DoCommand &HD, GetOff$: RETURN
- F7: MenuScan: RETURN
- F8: MenuMisc: RETURN
- F0: CLOSE : SYSTEM
- DEFDBL F
-
-
- '
- ' Echo replys to the screen if we were told to
- '
-
- DEFSNG F
- '
- ' BCDtoINT& Convert a BCD string to an Long Integer.
- '
- FUNCTION BCDtoINT& (BcdString AS STRING, Numbytes AS INTEGER)
-
- DA$ = ""
-
- FOR i% = 1 TO Numbytes
- DA$ = RIGHT$("00" + HEX$(ASC(MID$(BcdString, i%, 1))), 2) + DA$
- NEXT i%
-
- BCDtoINT& = VAL(DA$)
- END FUNCTION
-
- ' +---------------------------------------------------------------------+
- ' | |
- ' | ICOM CI-V Packet Layout |
- ' | +----------+----------+---------+---------+---------+------+ |
- ' | | Preamble | Transmit | Receive | Command | Sub | EOM | |
- ' | | <FE><FE> | Address | Address | | Command | <FD> | |
- ' | +----------+----------+---------+---------+---------+------+ |
- ' | |
- ' | A packet consists of two bytes of &HFE, one byte for the |
- ' | transmit address (Controller), One byte receive address |
- ' | (Rig), one byte command, one to five byte subcommand, and |
- ' | finally the tail of one byte of &HFD. |
- ' | |
- ' +---------------------------------------------------------------------+
- SUB DoCommand (Cmd AS INTEGER, SubCmd AS STRING)
-
- '
- ' Create the packet and send it out
- '
- Out$ = CHR$(&HFE) + CHR$(&HFE) + CHR$(RA) + CHR$(TA) + CHR$(Cmd) + SubCmd + CHR$(&HFD)
- PRINT #1, Out$;
-
- '
- ' If we're watching packets, send to the screen in hex
- '
- IF SHOWCOM THEN
- VIEW PRINT 16 TO 20
- CLS
- LOCATE 17, 1
- PRINT " Sent:"; STRtoHEX$(Out$); " "
- PRINT " Echo:"
- PRINT " Back:"
- PRINT "Track:"
- END IF
- END SUB
-
- '
- ' Get a memory channel from the user
- '
- FUNCTION GetChan$
- i = 0
- WHILE i = 0
- VIEW PRINT 6 TO 20
- CLS
- LOCATE 12, 30: INPUT "Enter Memory Channel: ", i
- IF i < 1 OR i > 9999 THEN i = 0
- WEND
-
- IF i < 100 THEN
- GetChan$ = BCD$(i)
- ELSE
- i$ = RIGHT$("0000" + MID$(STR$(i), 2), 4)
- DA$ = ""
-
- FOR K = 1 TO 4 STEP 2
- DA$ = DA$ + BCD$(VAL(MID$(i$, K, 2)))
- NEXT K
- GetChan$ = DA$
- END IF
- CLS
- END FUNCTION
-
- DEFDBL F
- '
- ' Get a Frequency and convert to BCD then return it
- '
- FUNCTION GetFreq$ (ByteCnt AS INTEGER)
-
- VIEW PRINT 6 TO 20
- f = 0!
- WHILE f = 0!
- CLS
- LOCATE 12, 30: INPUT "Enter Frequency (MHz):"; f
- f = f + 1E-12: IF f < .1 OR f > 2147.484 THEN f = 0!
- WEND
-
- f$ = RIGHT$("0000000000" + MID$(STR$(INT(f * 1000000#)), 2), FREQCNT * 2)
-
- DA$ = ""
-
- FOR K = 1 TO (FREQCNT * 2) STEP 2
- DA$ = BCD$(VAL(MID$(f$, K, 2))) + DA$
- NEXT K
-
- CLS
- ShowFreq (DA$)
- GetFreq$ = DA$
- END FUNCTION
-
- DEFSNG F
- '
- '
- ' GetMenu - Process a Menu that is on the screen
- '
- FUNCTION GetMenu (x AS INTEGER, y0 AS INTEGER, y1 AS INTEGER)
-
- y = y0
-
- DO UNTIL TRUE
-
- LOCATE y, x: PRINT "";
-
- i$ = ""
- WHILE i$ = ""
- i$ = INKEY$
- WEND
-
- SELECT CASE MID$(i$, 1, 1)
- CASE CHR$(0):
- SELECT CASE MID$(i$, 2, 1)
-
- CASE CHR$(72), CHR$(75):
- LOCATE y, x: PRINT " ";
- y = y - 1: IF y < y0 THEN y = y1
- LOCATE y, x: PRINT "";
-
- CASE CHR$(80), CHR$(75):
- LOCATE y, x: PRINT " "
- y = y + 1: IF y > y1 THEN y = y0
- LOCATE y, x: PRINT "";
-
- END SELECT
-
- CASE CHR$(27): GetMenu = 0: EXIT FUNCTION
-
- CASE CHR$(13): GetMenu = y - y0 + 1: EXIT FUNCTION
-
- END SELECT
- LOOP
-
- END FUNCTION
-
- DEFDBL F
- '
- ' Get an offset, convert to BCD and return it
- '
- FUNCTION GetOff$
-
- f = 0!
- WHILE f = 0!
-
- VIEW PRINT 6 TO 20
- CLS
- LOCATE 12, 30: INPUT "Enter Offset (MHz):"; f
- f = f + 1E-12: IF f < .1 OR f >= 99.9999 THEN f = 0!
- WEND
-
- f$ = RIGHT$("0000000000" + MID$(STR$(INT(f * 10000#)), 2), 6)
-
- DA$ = ""
-
- FOR K = 1 TO 6 STEP 2
- DA$ = BCD$(VAL(MID$(f$, K, 2))) + DA$
- NEXT K
-
- CLS
- GetOff$ = DA$
- END FUNCTION
-
- DEFSNG F
- '
- ' MenuAnnounce - Put up the Announce Menu and allow user input
- '
- SUB MenuAnnounce
-
- LOCATE 10, 65: PRINT "┌─────────┐";
- LOCATE 11, 65: PRINT "│ │";
- LOCATE 12, 65: PRINT "│ All │"
- LOCATE 13, 65: PRINT "│ Freq │";
- LOCATE 14, 65: PRINT "│ │";
- LOCATE 15, 65: PRINT "└─────────┘"
-
-
- i% = GetMenu(66, 12, 13)
- CLS
-
- IF i% > 0 THEN
- DoCommand &H10, CHR$(i% - 1)
- END IF
-
- END SUB
-
- '
- ' MenuAntenna - Put up the Antenna Menu and allow user input
- '
- SUB MenuAntenna
-
- LOCATE 10, 65: PRINT "┌─────────┐";
- LOCATE 11, 65: PRINT "│ │";
- LOCATE 12, 65: PRINT "│ 1 (Off)│";
- LOCATE 13, 65: PRINT "│ 2 (On) │";
- LOCATE 14, 65: PRINT "│ │";
- LOCATE 15, 65: PRINT "└─────────┘"
-
-
- i% = GetMenu(66, 12, 13)
- CLS
-
- IF i% > 0 THEN
- DoCommand &H10, CHR$(i% - 1)
- END IF
- END SUB
-
- '
- ' MenuAttenuator - Put up the Attenuator Menu and allow user input
- '
- SUB MenuAttenuator
-
- LOCATE 10, 65: PRINT "┌─────────┐";
- LOCATE 11, 65: PRINT "│ OFF │";
- LOCATE 12, 65: PRINT "│ 10 dB │";
- LOCATE 13, 65: PRINT "│ 20 dB │";
- LOCATE 14, 65: PRINT "│ 30 dB │";
- LOCATE 15, 65: PRINT "└─────────┘"
-
-
- i% = GetMenu(66, 11, 14)
- CLS
-
- IF i% > 0 THEN
- DoCommand &H10, CHR$((i% - 1) * 16)
- END IF
- END SUB
-
- '
- ' MenuInfo - Put the Info Menu up and Get user input
- '
- SUB MenuInfo
-
- ShowPrompt
- LOCATE 10, 45: PRINT "┌────────────────┐"
- LOCATE 11, 45: PRINT "│ Frequency │"
- LOCATE 12, 45: PRINT "│ Mode │"
- LOCATE 13, 45: PRINT "│ Offset │"
- LOCATE 14, 45: PRINT "│ Limits │"
- LOCATE 15, 45: PRINT "└────────────────┘"
-
-
- i% = GetMenu(46, 11, 14)
- CLS
-
- SELECT CASE i%
- CASE 1: DoCommand &H3, ""
- CASE 2: DoCommand &H4, ""
- CASE 3: DoCommand &HC, ""
- CASE 4: DoCommand &H2, ""
- END SELECT
-
- END SUB
-
- '
- ' MenuMem - Put the Memory Menu up and get user input
- '
- '
- SUB MenuMem
-
- ShowPrompt
- LOCATE 9, 45: PRINT "┌────────────────┐"
- LOCATE 10, 45: PRINT "│ Memory │"
- LOCATE 11, 45: PRINT "│ Select Memory │"
- LOCATE 12, 45: PRINT "│ VFO M │"
- LOCATE 13, 45: PRINT "│ M VFO │"
- LOCATE 14, 45: PRINT "│ Memory Clear │"
- LOCATE 15, 45: PRINT "└────────────────┘"
-
-
- i% = GetMenu(46, 10, 14)
- CLS
-
- SELECT CASE i%
- CASE 1: DoCommand &H8, ""
- CASE 2: DoCommand &H8, GetChan$
- CASE 3: DoCommand &H9, ""
- CASE 4: DoCommand &HA, ""
- CASE 5: DoCommand &HB, ""
- END SELECT
- END SUB
-
- '
- ' MenuMisc - Put up the Misc Menu and await user input
- '
- SUB MenuMisc
-
- ShowPrompt
- LOCATE 10, 45: PRINT "┌────────────────┐"
- LOCATE 11, 45: PRINT "│ Tuning Step │"
- LOCATE 12, 45: PRINT "│ Attenuator │"
- LOCATE 13, 45: PRINT "│ Antenna │"
- LOCATE 14, 45: PRINT "│ Announcements │"
- LOCATE 15, 45: PRINT "└────────────────┘"
-
-
- i% = GetMenu(46, 11, 14)
-
- SELECT CASE i%
- CASE 1: MenuTuning
- CASE 2: MenuAttenuator
- CASE 3: MenuAntenna
- CASE 4: MenuAnnounce
- END SELECT
-
-
- END SUB
-
- '
- ' MenuMode - Put the Mode Menu up and get user input
- '
- SUB MenuMode
-
- ShowPrompt
- LOCATE 8, 45: PRINT "┌────────────────┐"
- LOCATE 9, 45: PRINT "│ LSB │"
- LOCATE 10, 45: PRINT "│ USB │"
- LOCATE 11, 45: PRINT "│ AM │"
- LOCATE 12, 45: PRINT "│ CW │"
- LOCATE 13, 45: PRINT "│ CW-Narrow │"
- LOCATE 14, 45: PRINT "│ RTTY │"
- LOCATE 15, 45: PRINT "│ FM │"
- LOCATE 16, 45: PRINT "│ Wide FM │"
- LOCATE 17, 45: PRINT "└────────────────┘"
-
-
- i% = GetMenu(46, 9, 15)
- CLS
-
- SELECT CASE i%
- CASE 1: A$ = CHR$(&H0)
- CASE 2: A$ = CHR$(&H1)
- CASE 3: A$ = CHR$(&H2)
- CASE 4: A$ = CHR$(&H3) + CHR$(&H1)
- CASE 5: A$ = CHR$(&H3) + CHR$(&H2)
- CASE 5: A$ = CHR$(&H4)
- CASE 6: A$ = CHR$(&H5)
- CASE 7: A$ = CHR$(&H6)
- END SELECT
-
- IF i% > 0 THEN
- DoCommand 6, A$
- ShowMode (A$ + CHR$(0))
- END IF
-
- END SUB
-
- '
- ' MenuScan - Put the Scan Menu up and Get user input
- '
- SUB MenuScan
-
- ShowPrompt
- LOCATE 10, 45: PRINT "┌────────────────┐"
- LOCATE 11, 45: PRINT "│ Start Scan │"
- LOCATE 12, 45: PRINT "│ Stop Scan │"
- LOCATE 13, 45: PRINT "│ Ignore Channel│"
- LOCATE 14, 45: PRINT "│ Use Channel │"
- LOCATE 15, 45: PRINT "└────────────────┘"
-
-
- i% = GetMenu(46, 11, 14)
- CLS
-
- SELECT CASE i%
- CASE 1: DoCommand &HE, CHR$(1)
- CASE 2: DoCommand &HE, CHR$(0)
- CASE 3: DoCommand &HE, CHR$(&HB1)
- CASE 4: DoCommand &HE, CHR$(&HB0)
- END SELECT
- END SUB
-
- '
- ' MenuTuning - Put the Tuning Menu up and get user input
- '
- SUB MenuTuning
-
- LOCATE 7, 65: PRINT "┌─────────┐";
- LOCATE 8, 65: PRINT "│ 10 Hz │";
- LOCATE 9, 65: PRINT "│ 1 Khz │";
- LOCATE 10, 65: PRINT "│ 2 Khz │";
- LOCATE 11, 65: PRINT "│ 3 Khz │";
- LOCATE 12, 65: PRINT "│ 4 Khz │";
- LOCATE 13, 65: PRINT "│ 5 Khz │";
- LOCATE 14, 65: PRINT "│ 6 Khz │";
- LOCATE 15, 65: PRINT "│ 7 Khz │";
- LOCATE 16, 65: PRINT "│ 8 Khz │";
- LOCATE 17, 65: PRINT "│ 9 Khz │";
- LOCATE 18, 65: PRINT "│ 10 Khz │";
- LOCATE 19, 65: PRINT "└─────────┘"
-
-
- i% = GetMenu(66, 8, 18)
- CLS
-
- IF i% > 0 THEN
- DoCommand &H10, CHR$(i% - 1)
- END IF
- END SUB
-
- '
- ' MenuVFO - Put the VFO Menu up and get user input
- '
- SUB MenuVFO
-
- ShowPrompt
- LOCATE 8, 45: PRINT "┌────────────────┐"
- LOCATE 9, 45: PRINT "│ Select VFO │"
- LOCATE 10, 45: PRINT "│ Select VFO A │"
- LOCATE 11, 45: PRINT "│ Select VFO B │"
- LOCATE 12, 45: PRINT "│ VFO A = VFO B │"
- LOCATE 13, 45: PRINT "│ Swap A and B │"
- LOCATE 14, 45: PRINT "│ Split on │"
- LOCATE 15, 45: PRINT "│ Split Off │"
- LOCATE 16, 45: PRINT "│ Set Offset │"
- LOCATE 17, 45: PRINT "└────────────────┘"
-
-
- i% = GetMenu(46, 9, 16)
- CLS
-
- SELECT CASE i%
- CASE 1: DoCommand &H7, ""
- CASE 2: DoCommand &H7, CHR$(0)
- CASE 3: DoCommand &H7, CHR$(1)
- CASE 4: DoCommand &H7, CHR$(&HA0)
- CASE 5: DoCommand &H7, CHR$(&HB0)
- CASE 6: DoCommand &HF, CHR$(1)
- CASE 7: DoCommand &HF, CHR$(0)
- CASE 8: DoCommand &HD, GetOff$
- END SELECT
- END SUB
-
- DEFDBL F
- SUB ParseEcho (Echo AS STRING)
- VIEW PRINT 16 TO 19
- IF SHOWCOM THEN
- LOCATE 17, 7: PRINT STRtoHEX$(Echo);
- END IF
-
- END SUB
-
- '
- ' ParseReply - Character has arrived from rig, stuff it away until
- ' have an entire packet and process it.
- '
- SUB ParseReply
- STATIC Hold$
-
- '
- ' Accumulate the Reply, if its not end of packet get out early
- '
- Hold$ = Hold$ + INPUT$(LOC(PORTNO), PORTNO)
- IF INSTR(Hold$, CHR$(&HFD)) = 0 THEN
- EXIT SUB
- END IF
-
- SELECT CASE MID$(Hold$, 3, 1) ' Who was the packet from?
- CASE CHR$(RA): ParseEcho (Hold$) ' - Controller
-
- CASE CHR$(TA): ParseRig (Hold$) ' - Rig
-
- CASE CHR$(0): ParseTranceive (Hold$) ' - Transceive Function
- END SELECT
-
-
- ' Get ready for next reply
- Hold$ = ""
- END SUB
-
- '
- ' ParseRig - Process packets that came from the rig
- '
- SUB ParseRig (rig AS STRING)
- '
- ' Echo replys to the screen if we were told to
- '
- IF SHOWCOM THEN
- LOCATE 18, 7: PRINT STRtoHEX$(rig);
- END IF
-
-
- SELECT CASE MID$(rig, 5, 1)
-
- CASE CHR$(&HFF): LOCATE 25, 1: PRINT "[BLANK] ";
- CASE CHR$(&HFB): LOCATE 25, 1: PRINT "[OK] ";
- CASE CHR$(&HFA): LOCATE 25, 1: PRINT "[ERROR] ";
-
- CASE CHR$(&H2): ShowLimit (MID$(rig, 6))
- CASE CHR$(&H3): ShowFreq (MID$(rig, 6))
- CASE CHR$(&H4): ShowMode (MID$(rig, 6))
- CASE CHR$(&HC): ShowOffset (MID$(rig, 6))
-
- CASE ELSE: LOCATE 25, 1: PRINT "[Unknown]";
-
- END SELECT
- END SUB
-
- '
- ' ParseTranceive - Process packets that showed up as "Tranceive" packets
- '
- SUB ParseTranceive (Tranceive AS STRING)
- '
- ' Echo replys to the screen if we were told to
- '
- VIEW PRINT 17 TO 19
- IF SHOWCOM THEN
- LOCATE 19, 7: PRINT STRtoHEX$(Tranceive);
- END IF
-
- LOCATE 25, 1: PRINT "[Track] ";
-
- SELECT CASE MID$(Tranceive, 5, 1)
-
- CASE CHR$(&H0): ShowFreq (MID$(Tranceive, 6))
- CASE CHR$(&H1): ShowMode (MID$(Tranceive, 6))
-
- CASE ELSE: LOCATE 25, 1: PRINT "[UnTrack]";
- END SELECT
- END SUB
-
- '
- ' Set up the BCD string array
- '
- SUB SetupBCD
- FOR M = 0 TO 9
- FOR N = 0 TO 9
- BCD$(10 * M + N) = CHR$(16 * M + N)
- NEXT N
- NEXT M
- END SUB
-
- '
- ' Setup the channel to the serial port
- '
- SUB SetupCOM
- OPEN PORT$ + ":" + CONF$ + ",CD0,CS0,DS0,OP0,RS" FOR RANDOM AS #1
- ON COM(PORTNO) GOSUB Serial
- COM(PORTNO) ON
- END SUB
-
- '
- ' ShowFreq - Print the Frequency to the Display area
- '
- SUB ShowFreq (Args AS STRING)
- VIEW PRINT 1 TO 5
- LOCATE 4, 6
- PRINT USING "#,###,###,###"; BCDtoINT(Args, FREQCNT)
- END SUB
-
- '
- ' ShowLimit - Print the upper and lower band limits in the display area
- '
- SUB ShowLimit (Args AS STRING)
-
- VIEW PRINT 1 TO 5
- LOCATE 4, 52
- PRINT USING "#,###,###,###"; BCDtoINT(Args, FREQCNT)
-
- A$ = MID$(Args, FREQCNT + 2)
- LOCATE 4, 67
- PRINT USING "#,###,###,###"; BCDtoINT(A$, FREQCNT)
-
- END SUB
-
- '
- ' ShowMainPrompts - Print the Display and Menu Key Info
- '
- SUB ShowMainPrompts
-
- VIEW PRINT 1 TO 25
- CLS
-
- '
- ' Paint the Output Fields
- '
- LOCATE 1, 1
- PRINT " ┌────────── Limits ───────────┐"
- PRINT "Chan Frequency Mode IF Width Offset Lower Upper "
- PRINT "┌──┐┌──────────────┬─────────┐┌────────┐┌───────┐┌──────────────┬──────────────┐"
- PRINT "│ ││ │ ││ ││ ││ │ │"
- PRINT "└──┘└──────────────┴─────────┘└────────┘└───────┘└──────────────┴──────────────┘"
-
- '
- ' Paint the prompts
- '
- LOCATE 21, 1
- PRINT "╔═══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╦═══════╦══════╗"
- PRINT "║ F1 ║ F2 ║ F3 ║ F4 ║ F5 ║ F6 ║ F7 ║ F8 ║ ║ F10 ║"
- PRINT "║ Read ║ VFO ║ Mem ║ Mode ║ Freq ║ Offset║ Scan ║ Misc ║ ║ EXIT ║"
- PRINT "╚═══════╩═══════╩═══════╩═══════╩═══════╩═══════╩═══════╩═══════╩═══════╩══════╝"
- VIEW PRINT 6 TO 20
-
- '
- ' Setup function key handlers for each options
- '
- ON KEY(1) GOSUB F1
- ON KEY(2) GOSUB F2
- ON KEY(3) GOSUB F3
- ON KEY(4) GOSUB F4
- ON KEY(5) GOSUB F5
- ON KEY(6) GOSUB F6
- ON KEY(7) GOSUB F7
- ON KEY(8) GOSUB F8
- ON KEY(10) GOSUB F0
-
- '
- ' Turn the key handlers on
- '
- FOR i% = 1 TO 8
- KEY(i%) ON
- NEXT i%
- KEY(10) ON
- END SUB
-
- '
- ' ShowMode - Print the Mode and Width in the display area
- '
- SUB ShowMode (Args AS STRING)
-
- VIEW PRINT 1 TO 5
- LOCATE 4, 21
- SELECT CASE MID$(Args, 1, 1)
- CASE CHR$(0): PRINT " LSB ";
- CASE CHR$(1): PRINT " USB ";
- CASE CHR$(2): PRINT " AM ";
- CASE CHR$(3): PRINT " CW ";
- CASE CHR$(4): PRINT " RTTY ";
- CASE CHR$(5): PRINT " FM ";
- CASE CHR$(6): PRINT " Wide-FM ";
- CASE ELSE: PRINT USING " ## "; HEX$(ASC(MID$(Args, 1, 1)))
- END SELECT
-
- LOCATE 4, 32
- SELECT CASE MID$(Args, 2, 1)
- CASE CHR$(0): PRINT " ";
- CASE CHR$(1): PRINT " Wide ";
- CASE CHR$(2): PRINT " Narrow ";
- CASE ELSE: PRINT USING " ## "; HEX$(ASC(MID$(Args, 2, 1)))
- END SELECT
-
- END SUB
-
- '
- ' ShowOffset - Print the frequency offset in the display area
- '
- SUB ShowOffset (Args AS STRING)
- VIEW PRINT 1 TO 5
- i& = BCDtoINT(Args, 3)
- f = CDBL(i&) / 100000
- LOCATE 4, 42
- PRINT USING "#.#####"; f
- END SUB
-
- DEFSNG F-Z
- '
- ' ShowPrompt - Clear the center of the screen and paint the
- ' menu prompt on the left side
- '
- SUB ShowPrompt
- VIEW PRINT 6 TO 20
- CLS
- LOCATE 11, 5: PRINT "Use arrow keys to move the "
- LOCATE 12, 5: PRINT "selection. Press the ENTER "
- LOCATE 13, 5: PRINT "key to select or press the "
- LOCATE 14, 5: PRINT "ESC key to abort. "
- END SUB
-
- DEFINT G-Z
- DEFDBL F
- '
- ' STRtoHEX$ - Translate all the characters in a string to hex and
- ' return the resulting string.
- '
- FUNCTION STRtoHEX$ (Str AS STRING)
- Scn$ = ""
- FOR i = 1 TO LEN(Str)
- C$ = HEX$(ASC(MID$(Str, i, 1)))
- Scn$ = Scn$ + C$ + " "
- NEXT i
- STRtoHEX$ = Scn$
- END FUNCTION
-
-